import java.util.Stack;

public class MinStack {
    Stack<Integer>stackA=new Stack<>();
    Stack<Integer>minStack=new Stack<>();

    //初始化堆栈对象。
    public MinStack() {
    }
    //将元素val推入堆栈。
    public void push(int val) {
        //最小栈起码得有一个元素才能比较
        if(minStack.size()==0){
            minStack.push(val);
            //小于等于最小栈栈顶
        }else if(val<=minStack.peek()){
            minStack.push(val);
        }
        //无论什么情况栈A都要入栈
        stackA.push(val);
    }
    // 删除堆栈顶部的元素。
    public void pop() {
        if(stackA.peek().equals(minStack.peek())){
            minStack.pop();
        }
        stackA.pop();
    }
    // 获取堆栈顶部的元素
    public int top() {
        return stackA.peek();
    }
    //获取堆栈中的最小元素。
    public int getMin() {
        return minStack.peek();
    }
}
